package top.jacktgq.itheima.bio.UDP.Demo1;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;

/*
 * 实现UDP协议的接收端
 *    实现封装数据的类java.net.DatagramPacket  将你的数据接收
 *    实现数据传输的类java.net.DatagramSocket  接收数据包
 * 实现步骤：
 *    1.创建DatagramSocket对象，绑定端口号
 *      要和发送端端口号一致
 *    2.创建一个字节数组，接收发来的数据
 *    3.创建数据包对象DatagramPacket
 *    4.调用DatagramSocket对象方法
 *      receive(DatagramPacket dp) 接收数据，将数据放在数据包中
 *    5.拆包
 *      发送端的IP地址
 *         数据包对象DatagramPacket对象中的方法getAddress()
 *         返回值是InetAddress类对象
 *      接收到的字节个数
 *         数据包对象DatagramPacket对象中的方法getLength()
 *      发送端的端口号走的对方计算机的端口号
 *         数据包对象DatagramPacket对象中的方法getPort()
 *    6.关闭资源
 */
public class UDPReceive {

	public static void main(String[] args) {
		try {
			//创建数据包传输对象DatagramSocket绑定端口号
			DatagramSocket ds = new DatagramSocket(5000);
			
			//创建一个字节数组等着装数据
			byte[] data = new byte[1024];
			
			//创建数据包对象，传递字节数组
			DatagramPacket dp = new DatagramPacket(data,data.length);
			
			//调用ds对象的方法receive传递数据包
			ds.receive(dp);
			
			//获取发送端的IP地址对象
			String ip = dp.getAddress().getHostAddress();
			
			//获取接收到的字节个数
			int length = dp.getLength();
			
			//获取发送端的端口号
			int port = dp.getPort();
			
			//数据发送端IP地址和发送数据
			System.out.println(ip + "-" + port + "：" + new String(data,0,length));
			
			//关闭资源
			ds.close();
		} catch (SocketException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}
